//package com.lz.service.config;
//
//import org.springframework.cache.annotation.EnableCaching;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.data.redis.cache.RedisCacheConfiguration;
//import org.springframework.data.redis.cache.RedisCacheManager;
//import org.springframework.data.redis.connection.RedisConnectionFactory;
//import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
//import org.springframework.data.redis.serializer.RedisSerializationContext;
//
//import java.time.Duration;
//
//@Configuration
//@EnableCaching
//public class RedisCache {
//
//    /**
//      RedisCacheManager 配置
//      这是当前激活的 Redis 缓存配置：
//      RedisCacheConfiguration 配置：
//      entryTtl(Duration.ofMinutes(10)) - 设置缓存项的生存时间(TTL)为 10 分钟
//      serializeValuesWith(...) - 设置值的序列化方式为 JSON 格式，使用 Jackson 库
//      RedisCacheManager 构建：
//      基于 RedisConnectionFactory (由 Spring Boot 自动配置提供)
//      使用上面定义的默认缓存配置
//      通过 builder 模式创建 RedisCacheManager 实例
//      特点
//      使用 Redis 作为分布式缓存存储
//      所有缓存默认使用 JSON 序列化（比 Java 原生序列化更通用和可读）
//      统一的 10 分钟过期时间
//
//      与 Spring 缓存抽象集成，可以通过 @Cacheable 等注解使用
//      @param redisConnectionFactory
//     * @return
//     */
//
//    @Bean
//    public RedisCacheManager redisCacheManager(RedisConnectionFactory redisConnectionFactory) {
//        RedisCacheConfiguration cacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
//                .entryTtl(Duration.ofMinutes(10)) // 设置缓存的过期时间
//                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
//
//        return RedisCacheManager.builder(redisConnectionFactory)
//                .cacheDefaults(cacheConfiguration)
//                .build();
//    }
//    //@Cacheable（缓存数据）如果缓存不存在，则执行方法并将结果存入缓存；如果缓存已存在，则直接返回缓存值，不执行方法。适用于查询方法。
//    //@CachePut（更新缓存）如果缓存不存在，则执行方法并将结果存入缓存；如果缓存已存在，则先删除缓存，再执行方法，并将结果存入缓存。适用于更新方法。
//    //@CacheEvict（删除缓存）删除缓存。适用于删除方法。
//}